home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 05 / 6 / DISK0564.ZIP / SOURCE.ARC / ASM.ARC / GETARGS.ASM < prev    next >
Assembly Source File  |  1988-03-25  |  2KB  |  62 lines

  1.         TITLE   COMMAND LINE ARGUMENT PARSER
  2.  
  3.     .XLIST
  4.     INCLUDE    MACROS.DEF
  5.     INCLUDE ASCII.DEF
  6.     .LIST
  7.  
  8.     DOSSEG
  9.     .MODEL    SMALL
  10.     .CODE
  11.         EXTRN SKIPSP:NEAR
  12.         PUBLIC GETARGS
  13. ;
  14. ;    COLLECT ARGUMENTS FROM COMMAND LINE
  15. ;
  16. ;    ENTRY:    DS:BX POINTS TO COMMAND LINE
  17. ;        ES:SI POINTS TO SPACE FOR ARGUMENT POINTERS
  18. ;        ES:DI POINTS TO BUFFER FOR ARGUMENTS
  19. ;        CX = MAX. # OF ARGUMENTS
  20. ;
  21. ;    EXIT:    CX = ACTUAL # OF ARGUMENTS
  22. ;        'C'=1 IF TOO MANY ARGS
  23. ;
  24. GETARGS PROC NEAR
  25.         MOV     DX,0                    ;DX COUNTS # OF ARGUMENTS
  26. TOP:
  27.     CALL    SKIPSP
  28.     JB    ENDLINE            ;IF END OF LINE
  29. SAVEARG:
  30.         INC     DX                      ;BUMP ARGUMENT COUNT
  31.         CMP     DX,CX
  32.         JG      TOOMANY                 ;IF TOO MANY ARGS
  33.     MOV    AX,DI
  34.         MOV     WORD PTR ES:[SI],AX     ;SAVE POINTER TO ARG
  35.         ADD     SI,2                    ;ADVANCE TO NEXT TABLE ENTRY
  36. CNTARGS:
  37.         MOV     AL,BYTE PTR DS:[BX]     ;GET CHAR. FROM COMMAND LINE
  38.         CMP     AL,0
  39.         JE      ENDLINE                 ;IF END OF LINE
  40.         COMPLIST <SPACE,TAB>,NEXTARG    ;SEE IF SPACE OR TAB
  41.     MOV    BYTE PTR ES:[DI],AL    ;NOT DELIM, STORE ARG. TEXT
  42.     INC    DI
  43.         INC     BX
  44.         JMP     CNTARGS                 ;LOOP TILL DELIMITER FOUND
  45. NEXTARG:
  46.     MOV    BYTE PTR ES:[DI],0    ;0-TERMINATE ARG
  47.     INC    DI
  48.     JMP    TOP            ;BACK TO TOP OF LOOP
  49. ENDLINE:
  50.     MOV    BYTE PTR ES:[DI],0    ;END ARG. W. 0
  51.     MOV    CX,DX            ;MOVE ARG COUNT TO CX
  52.     CLC                ;CLEAR CARRY TO SIGNAL NO ERROR
  53.     RET
  54. TOOMANY:
  55.     MOV    CX,DX            ;MOVE ARG COUNT TO CX
  56.     STC                ;TOO MANY ARGUMENTS, SET CARRY
  57.     RET
  58. GETARGS ENDP
  59.  
  60.     END
  61.  
  62.